1 using Photon;
2 using
UnityEngine;
3 using
System.Collections;
4
5 public
class DemoMecanimGUI : PunBehaviour
6 {
7     
#region Properties
8
9     
public GUISkin Skin;
10     
11     
#endregion
12
13
14     
#region Members
15     
16     
private PhotonAnimatorView m_AnimatorView; // local animatorView. set when we create our character in CreatePlayerObject()
17     
private Animator m_RemoteAnimator; // to display the synchronized values on the right side in the GUI. A third player will simply be ignored (until the second player leaves)
18
19     
private float m_SlideIn = 0f;
20     
private float m_FoundPlayerSlideIn = 0f;
21     
private bool m_IsOpen = false;
22
23     
#endregion
24
25
26     
#region Unity
27
28     
public void Awake()
29     {
30
31     }
32
33     
public void Update()
34     {
35         FindRemoteAnimator();
36
37         m_SlideIn = Mathf.Lerp( m_SlideIn, m_IsOpen ?
1f : 0f, Time.deltaTime * 9f );
38         m_FoundPlayerSlideIn = Mathf.Lerp( m_FoundPlayerSlideIn, m_AnimatorView ==
null ? 0f : 1f, Time.deltaTime * 5f );
39     }

40
41     ///
<summary>Finds the Animator component of a remote client on a GameObject tagged as Player and sets m_RemoteAnimator.</summary>
42     
public void FindRemoteAnimator()
43     {
44         
if( m_RemoteAnimator != null )
45         {
46             
return;
47         }
48
49         
// the prefab has to be tagged as Player
50         GameObject[] gos = GameObject.FindGameObjectsWithTag(
"Player" );
51         
for( int i = 0; i < gos.Length; ++i )
52         {
53             PhotonView view = gos[ i ].GetComponent<PhotonView>();
54             
if( view != null && view.isMine == false )
55             {
56                 m_RemoteAnimator = gos[ i ].GetComponent<Animator>();
57             }
58         }
59     }
60
61     
public void OnGUI()
62     {
63         GUI.skin = Skin;
64
65         
string[] synchronizeTypeContent = new string[] { "Disabled", "Discrete", "Continuous" };
66
67         GUILayout.BeginArea(
new Rect( Screen.width - 200 * m_FoundPlayerSlideIn - 400 * m_SlideIn, 0, 600, Screen.height ), GUI.skin.box );
68         {
69             GUILayout.Label(
"Mecanim Demo", GUI.skin.customStyles[ 0 ] );
70
71             GUI.color = Color.white;
72             
string label = "Settings";
73
74             
if( m_IsOpen == true )
75             {
76                 label =
"Close";
77             }
78
79             
if( GUILayout.Button( label, GUILayout.Width( 110 ) ) )
80             {
81                 m_IsOpen = !m_IsOpen;
82             }
83
84             
string parameters = "";
85
86             
if( m_AnimatorView != null )
87             {
88                 parameters +=
"Send Values:\n";
89
90                 
for( int i = 0; i < m_AnimatorView.GetSynchronizedParameters().Count; ++i )
91                 {
92                     PhotonAnimatorView.SynchronizedParameter parameter = m_AnimatorView.GetSynchronizedParameters()[ i ];
93                     
94                     
try
95                     {
96                         
switch( parameter.Type )
97                         {
98                         
case PhotonAnimatorView.ParameterType.Bool:
99                             parameters += parameter.Name +
" (" + ( m_AnimatorView.GetComponent<Animator>().GetBool( parameter.Name ) ? "True" : "False" ) + ")\n";
100                             
break;
101                         
case PhotonAnimatorView.ParameterType.Int:
102                             parameters += parameter.Name +
" (" + m_AnimatorView.GetComponent<Animator>().GetInteger( parameter.Name ) + ")\n";
103                             
break;
104                         
case PhotonAnimatorView.ParameterType.Float:
105                             parameters += parameter.Name +
" (" + m_AnimatorView.GetComponent<Animator>().GetFloat( parameter.Name ).ToString( "0.00" ) + ")\n";
106                             
break;
107                         }
108                     }
109                     
catch
110                     {
111                         Debug.Log(
"derrrr for " + parameter.Name );
112                     }
113                 }
114             }
115
116             
if( m_RemoteAnimator != null )
117             {
118                 parameters +=
"\nReceived Values:\n";
119
120                 
for( int i = 0; i < m_AnimatorView.GetSynchronizedParameters().Count; ++i )
121                 {
122                     PhotonAnimatorView.SynchronizedParameter parameter = m_AnimatorView.GetSynchronizedParameters()[ i ];
123
124                     
try
125                     {
126                         
switch( parameter.Type )
127                         {
128                         
case PhotonAnimatorView.ParameterType.Bool:
129                             parameters += parameter.Name +
" (" + ( m_RemoteAnimator.GetBool( parameter.Name ) ? "True" : "False" ) + ")\n";
130                             
break;
131                         
case PhotonAnimatorView.ParameterType.Int:
132                             parameters += parameter.Name +
" (" + m_RemoteAnimator.GetInteger( parameter.Name ) + ")\n";
133                             
break;
134                         
case PhotonAnimatorView.ParameterType.Float:
135                             parameters += parameter.Name +
" (" + m_RemoteAnimator.GetFloat( parameter.Name ).ToString( "0.00" ) + ")\n";
136                             
break;
137                         }
138                     }
139                     
catch
140                     {
141                         Debug.Log(
"derrrr for " + parameter.Name );
142                     }
143                 }
144             }
145
146             GUIStyle style =
new GUIStyle( GUI.skin.label );
147             style.alignment = TextAnchor.UpperLeft;
148
149             GUI.color =
new Color( 1f, 1f, 1f, 1 - m_SlideIn );
150             GUI.Label(
new Rect( 10, 100, 600, Screen.height ), parameters, style );
151
152             
if( m_AnimatorView != null )
153             {
154                 GUI.color =
new Color( 1f, 1f, 1f, m_SlideIn );
155
156                 GUILayout.Space(
20 );
157                 GUILayout.Label(
"Synchronize Parameters" );
158
159                 
for( int i = 0; i < m_AnimatorView.GetSynchronizedParameters().Count; ++i )
160                 {
161                     GUILayout.BeginHorizontal();
162                     {
163                         PhotonAnimatorView.SynchronizedParameter parameter = m_AnimatorView.GetSynchronizedParameters()[ i ];
164
165                         GUILayout.Label( parameter.Name, GUILayout.Width(
100 ), GUILayout.Height( 36 ) );
166
167                         
int selectedValue = (int)parameter.SynchronizeType;
168                         
int newValue = GUILayout.Toolbar( selectedValue, synchronizeTypeContent );
169
170                         
if( newValue != selectedValue )
171                         {
172                             m_AnimatorView.SetParameterSynchronized( parameter.Name, parameter.Type, (PhotonAnimatorView.SynchronizeType)newValue );
173                         }
174                     }
175                     GUILayout.EndHorizontal();
176                 }
177             }
178         }
179         GUILayout.EndArea();
180     }
181
182     
#endregion
183
184
185     
#region Photon
186
187     
public override void OnJoinedRoom()
188     {
189         CreatePlayerObject();
190     }
191
192     
private void CreatePlayerObject()
193     {
194         Vector3 position =
new Vector3( -2, 0, 0 );
195         position.x += Random.Range( -
3f, 3f );
196         position.z += Random.Range( -
4f, 4f );
197
198         GameObject newPlayerObject = PhotonNetwork.Instantiate(
"Robot Kyle Mecanim", position, Quaternion.identity, 0 );
199         m_AnimatorView = newPlayerObject.GetComponent<PhotonAnimatorView>();
200     }
201
202     
#endregion
203 }


private PhotonAnimatorView m_AnimatorView; local animatorView. set when we create our character in CreatePlayerObject()

private Animator m_RemoteAnimator; to display the synchronized values on the right side in the GUI. A third player will simply be ignored (until the second player leaves)

Finds the Animator component of a remote client on a GameObject tagged as Player and sets m_RemoteAnimator.

the prefab has to be tagged as Player




Trò chơi Tic-Tac-Toe, game đánh caro full source code 53.600 lượt xem

Gõ tìm kiếm nhanh...